import { ElMessage } from "element-plus";

/**
 * 将文本复制到剪贴板
 * @param {string} text - 需要复制的文本内容
 * @param {Function} [successCallback] - 复制成功的回调函数
 * @param {Function} [errorCallback] - 复制失败的回调函数
 * @returns {Promise<boolean>} - 复制成功返回true，失败返回false
 */
export function copyToClipboard(text, successCallback, errorCallback) {
  // 检查输入是否为有效字符串
  if (typeof text !== 'string' || text.trim() === '') {
    const error = new Error('请提供有效的文本内容');
    if (typeof errorCallback === 'function') {
      errorCallback(error);
    }
    return Promise.resolve(false);
  }

  // 优先使用 Clipboard API（现代浏览器）
  if (navigator.clipboard) {
    return navigator.clipboard.writeText(text)
      .then(() => {
        if (typeof successCallback === 'function') {
          successCallback();
        }
        ElMessage.success('复制成功');
        return true;
      })
      .catch((error) => {
        if (typeof errorCallback === 'function') {
          errorCallback(error);
        }
        // 失败时降级使用传统方法
        return fallbackCopy(text, successCallback, errorCallback);
      });
  }

  // 传统方法（兼容旧浏览器）
  return fallbackCopy(text, successCallback, errorCallback);
}

/**
 * 传统复制方法（用于不支持 Clipboard API 的浏览器）
 * @param {string} text - 需要复制的文本内容
 * @param {Function} [successCallback] - 复制成功的回调函数
 * @param {Function} [errorCallback] - 复制失败的回调函数
 * @returns {Promise<boolean>}
 */
function fallbackCopy(text, successCallback, errorCallback) {
  // 创建临时文本区域
  const textarea = document.createElement('textarea');
  textarea.value = text;

  // 设置样式使其不可见但能被选中
  textarea.style.position = 'absolute';
  textarea.style.left = '-9999px';
  textarea.style.opacity = '0';

  // 添加到页面
  document.body.appendChild(textarea);

  try {
    // 选中并复制
    textarea.select();
    const successful = document.execCommand('copy');

    if (successful) {
      if (typeof successCallback === 'function') {
        successCallback();
      }
      return Promise.resolve(true);
    } else {
      throw new Error('复制失败，请手动复制');
    }
  } catch (error) {
    if (typeof errorCallback === 'function') {
      errorCallback(error);
    }
    ElMessage.error('复制失败');
    return Promise.resolve(false);
  } finally {
    // 清理临时元素
    document.body.removeChild(textarea);
  }
}



// 使用示例
// copyToClipboard(
//   '需要复制的文本内容',
//   () => console.log('复制成功！'),
//   (err) => console.error('复制失败:', err.message)
// );
